using System;
using System.Collections.Generic;
using System.Text;
using Attach.Internal;

namespace Attach
{
    public abstract class Return
    {
        public static Return Nothing
        {
            get { return new ReturnNothing(); }
        }

        public static Return Value(object value)
        {
            return new ReturnValue(value);
        }

        public static Return MultipleValues(params object[] values)
        {
            return new ReturnMultipleValues(values);
        }

        public static Return Exception(Exception exception)
        {
            return new ReturnException(exception);
        }

        public static Return DelegateResult(ReturnDelegateResult.DelegateActionDelegate actionDelegate)
        {
            return new ReturnDelegateResult(actionDelegate);
        }

        public abstract object GetReturnValue(object[] parameters);
    }
}
